package _9_日期与时间;

import org.junit.jupiter.api.Test;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;

/**
 * 处理带时区的日期和时间类 -- ZonedDateTime
 *
 * 可以简单地把ZonedDateTime理解成 LocalDateTime + ZoneId。
 * ZoneId是java.time引入的新的时区类，注意和旧的java.util.TimeZone区别。
 *
 * https://www.liaoxuefeng.com/wiki/1252599548343744/1303904694304801
 */
public class _3_ZonedDateTimeTest {
    
    @Test
    public void createZonedDateTime(){
        ZonedDateTime zonedDateTime = ZonedDateTime.now();
        System.out.println(zonedDateTime);
    }

    @Test
    public void createZonedDateTime2(){
        ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("America/New_York"));
        System.out.println(zonedDateTime);
    }

    //通过给一个LocalDateTime附加一个ZoneId，就可以变成ZonedDateTime
    @Test
    public void createZonedDateTime3(){
        LocalDateTime localDateTime = LocalDateTime.now();
        ZonedDateTime zonedDateTime1 = localDateTime.atZone(ZoneId.systemDefault());
        ZonedDateTime zonedDateTime2 = localDateTime.atZone(ZoneId.of("America/New_York"));
        System.out.println(zonedDateTime1);
        System.out.println(zonedDateTime2);
    }

    /**
     * 时区转换
     */
    @Test
    public void withZoneSameInstantTest(){
        //以中国时区获取当前时间:
        ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
        //转换为纽约时间:
        ZonedDateTime zonedDateTime1 = zonedDateTime.withZoneSameInstant(ZoneId.of("America/New_York"));
        System.out.println(zonedDateTime);
        System.out.println(zonedDateTime1);
    }

    /**
     * ZonedDateTime转换为LocalDateTime时，直接丢弃了时区信息
     */
    @Test
    public void toLocalDateTimeTest(){
        ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.systemDefault());
        LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
        System.out.println(localDateTime);
    }


}
